5  Plotando dados com coordenadas

6 Plotando pontos

Vamos carregar os pacotes necessários:

library(geobr)
library(ggplot2)
library(sf)
library(rnaturalearth)
brasil <- read_country(year = 2020)

pontos <- data.frame(
  longitude = c(-46.6333, -43.2075, -47.9292), 
  latitude = c(-23.5505, -22.9028, -15.7801),
  cidade = c("São Paulo", "Rio de Janeiro", "Brasília"))

pontos_sf <- st_as_sf(pontos, coords = c("longitude", "latitude"), crs = 4326)

ggplot() +
  geom_sf(data = brasil, fill = "white", color = "black") +
  geom_sf(data = pontos_sf, color = "red", size = 3) +
  theme_minimal()

6.1 Plotar o mapa com os pontos, cada um com um formato diferente

ggplot() +
  geom_sf(data = brasil, fill = "white", color = "black") +
  geom_sf(data = pontos_sf, color = "red", aes(shape = cidade), size = 4) +
  theme_minimal() +
  scale_shape_manual(values = c("São Paulo" = 16, 
                                 "Rio de Janeiro" = 17, 
                                 "Brasília" = 18))

6.2 Plotar o mapa com os pontos, cada um com uma cor diferente

ggplot() +
  geom_sf(data = brasil, fill = "white", color = "black") +
  geom_sf(data = pontos_sf, aes(color = cidade), size = 3) +
  theme_minimal() +
  scale_color_manual(values = c("São Paulo" = "blue", 
                                "Rio de Janeiro" = "green", 
                                "Brasília" = "red"))

7 Plotando legendas

Vamos utilizar o argumento annotate do ggplot2 para plotar as legendas. Usaremos coordenadas de latitude (y) e longitude (x) para indicar a localização do texto. Os textos serão valores em porcentagem fictícios.

brazil <- ne_states(country = "Brazil", returnclass = "sf")

ggplot() +
        geom_sf(data = brazil, fill="#2D3E50") +
        annotate("text", x = -44, y = -18.5, label = "50,9%", color = "orange", size = 3) +
        annotate("text", x = -41.5, y = -12, label = "5.3%", color = "orange", size = 3) +
        annotate("text", x = -51.5, y = -24.5, label = "8%", color = "orange", size = 3) +
        annotate("text", x = -55.5, y = -13, label = "6,6%", color = "orange", size = 3) +
        annotate("text", x = -49.7, y = -15.9, label = "4%", color = "orange", size = 3) +
        annotate("text", x = -39.2, y = -5, label = "1.3%", color = "orange", size = 3) +
        annotate("text", x = -53.3, y = -29.5, label = "5.3%", color = "orange", size = 3) +
        annotate("text", x = -48.3, y = -22, label = "2.6%", color = "orange", size = 3) +
        annotate("text", x = -50, y = -27.2, label = "0.6%", color = "orange", size = 3) +
        annotate("text", x = -55, y = -20, label = "2%", color = "orange", size = 3) +
  theme_minimal()

Agora vamos fazer um outro exemplo. Iremos plotar os Estados que fazem parte do MATOPIBA. O MATOPIBA é uma região formada pelo estado do Tocantins e partes dos estados do Maranhão, Piauí e Bahia, onde ocorreu forte expansão agrícola a partir da segunda metade dos anos 1980, especialmente no cultivo de grãos. O nome é um acrônimo formado pelas siglas dos quatro estados estados.

library(ggplot2)
library(geobr)
library(sf)

br <- read_country(year=2018)
ma = read_state(code_state = 21)
to = read_state(code_state = 17)
pi = read_state(code_state = 22)
ba = read_state(code_state = 29)
MATOPIBA <- ggplot() +
  geom_sf(data=br, fill="#2D3E50") + 
  geom_sf(data=ma, fill="lightblue") +
  geom_sf(data=to, fill="lightblue") +
  geom_sf(data=pi, fill="lightblue") +
  geom_sf(data=ba, fill="lightblue") 

Agora vamos calcular os centróides dos Estados e nessa localização, plotar a sigla do Estado.

# Função para calcular o centroide dos estados
get_centroid <- function(state) {
  st_coordinates(st_centroid(st_union(state)))}

# Obter as coordenadas dos centroides dos estados
centroid_ma <- get_centroid(ma)
centroid_to <- get_centroid(to)
centroid_pi <- get_centroid(pi)
centroid_ba <- get_centroid(ba)

MATOPIBA2 <-  MATOPIBA + 
            annotate("text", x = centroid_ma[,1], y = centroid_ma[,2], label = "MA", color = "red", size = 3) +
            annotate("text", x = centroid_to[,1], y = centroid_to[,2], label = "TO", color = "red", size = 3) +
            annotate("text", x = centroid_pi[,1], y = centroid_pi[,2], label = "PI", color = "red", size = 3) +
            annotate("text", x = centroid_ba[,1], y = centroid_ba[,2], label = "BA", color = "red", size = 3) 

Agora vamos plotar uma legenda referente a área plantada de soja na safra 2022/2023 em cada Estado. De acordo com o Levantamento Sistemático da Produção Agrícola do IBGE, em área plantada, no Piauí a soja ocupou 960.945 ha, Maranhão 1.167.169 ha, Tocantins, 1.305.176 ha e a Bahia, 1.905.000 ha, que gerou uma produção de 19.043.000 toneladas do grão na região.

MATOPIBA2 +
           annotate("text", x = -45.0, y = -6.5, label = "1.167.169", color = "orange", size = 3) +
           annotate("text", x = -48.0, y = -12.0, label = "1.305.176", color = "orange", size = 3) +
           annotate("text", x = -43.0, y = -9.0, label = "960.945", color = "orange", size = 3) +
           annotate("text", x = -42.0, y = -14.0, label = "1.905.000", color = "orange", size = 3)